#ifndef _C_GL_COMMON_H_
#define _C_GL_COMMON_H_

#include "../interface/I_api_Common.h"
#include "../interface/I_api_Blob.h"
#include "../interface/S_api_Struct.h"
#include "../interface/C_gl_InputLayout.h"

enum E_gl_Reserved_Attribute
{
	E_gl_Reserved_Attribute_Position = 0x1000,
	E_gl_Reserved_Attribute_Normal = 0x1001,
	E_gl_Reserved_Attribute_Color = 0x1002,
	E_gl_Reserved_Attribute_MultiTexCoord0 = 0x1003,
	E_gl_Reserved_Attribute_MultiTexCoord1 = 0x1004,
	E_gl_Reserved_Attribute_MultiTexCoord2 = 0x1005,
	E_gl_Reserved_Attribute_MultiTexCoord3 = 0x1006,
};

class C_gl_Common : public I_api_Common
{
public:
	C_gl_Common();
	~C_gl_Common();

	virtual bool CompileShader(char	*	pSrcData,
														 int		SrcDataLen,
														 char	*	pFileName,
														 S_api_Shader_Macro * pDefines,
														 I_api_Include * pInclude,
														 char * pFunctionName,
														 char * pProfile,
														 unsigned int Flags,
														 I_api_Blob ** ppShader, 
														 I_api_Blob ** ppErrorMsgs);

	virtual bool CompileShader(char	*	pFileName,
														 S_api_Shader_Macro * pDefines,
														 I_api_Include * pInclude,
														 char * pFunctionName,
														 char * pProfile,
														 unsigned int Flags,
														 I_api_Blob ** ppShader, 
														 I_api_Blob ** ppErrorMsgs);

	virtual bool CompileShader(char	*	pSrcData,
														 int		SrcDataLen,
														 S_api_Shader_Macro * pDefines,
														 char * pFunctionName,
														 char * pProfile,
														 unsigned int Flags,
														 I_api_Blob ** ppShader, 
														 I_api_Blob ** ppErrorMsgs);

	virtual	bool	CreateInputLayout(S_api_Input_Element_Desc *pInputElementDescs, 
																	int NumElements, 
																	void *pShaderBytecodeWithInputSignature, 
																	int BytecodeLength, 
																	I_api_InputLayout **ppInputLayout);
};

#endif